﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// Reviewed
#pragma once

#include "GcmpSnapInterface.h"
#include "IObject.h"

namespace gcmp {

    class ISnap;

    /// \brief 捕捉结果候选集
    ///
    /// 包括捕捉操作返回的一组捕捉结果
    FINAL_INTERFACE class GCMP_SNAP_INTERFACE_EXPORT ISnapCandidates : public IObject
    {
    public:
        /// \brief 析构函数
        virtual ~ISnapCandidates() {}

        /// \brief 克隆对象
        /// \return 克隆得到的捕捉结果候选集合
        virtual OwnerPtr<ISnapCandidates> Clone() = 0;

        /// \brief 获取候选集包含的一组捕捉结果
        /// \return 候选集包含的一组捕捉结果
        virtual std::vector<const ISnap*> GetCandidates() const = 0;

        /// \brief 获取候选集中当前的一个捕捉结果
        /// \return 当前的一个捕捉结果
        virtual const ISnap* GetCurrentSnap() const = 0;

        /// \brief 更新当前捕捉结果为候选集中的下一个
        /// \return 下一个捕捉结果，若当前已是最后一个，则返回第一个捕捉结果
        virtual const ISnap* UpdateCurrentSnapToNext() = 0;
    };
}// namespace gcmp

